{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import pandas\n",
    "import json"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "with open('roll_calibration.json') as f:\n",
    "    roll_data = json.load(f)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "roll_readings = []\n",
    "for rec in roll_data['roll_readings']:\n",
    "    x, y, z = rec['mag_xyz']\n",
    "    roll_readings.append({\n",
    "        'pitch': rec['pitch'],\n",
    "        'roll': rec['roll'],\n",
    "        'x': x, 'y': y, 'z': z,\n",
    "    })"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>pitch</th>\n",
       "      <th>roll</th>\n",
       "      <th>x</th>\n",
       "      <th>y</th>\n",
       "      <th>z</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>9.840134</td>\n",
       "      <td>-7.433393</td>\n",
       "      <td>86</td>\n",
       "      <td>841</td>\n",
       "      <td>4083</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>9.652645</td>\n",
       "      <td>-7.619682</td>\n",
       "      <td>91</td>\n",
       "      <td>852</td>\n",
       "      <td>4059</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>10.755135</td>\n",
       "      <td>-4.912883</td>\n",
       "      <td>54</td>\n",
       "      <td>854</td>\n",
       "      <td>4081</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>11.575489</td>\n",
       "      <td>-7.202539</td>\n",
       "      <td>54</td>\n",
       "      <td>854</td>\n",
       "      <td>4081</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>10.462870</td>\n",
       "      <td>-9.086972</td>\n",
       "      <td>21</td>\n",
       "      <td>898</td>\n",
       "      <td>4074</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "       pitch      roll   x    y     z\n",
       "0   9.840134 -7.433393  86  841  4083\n",
       "1   9.652645 -7.619682  91  852  4059\n",
       "2  10.755135 -4.912883  54  854  4081\n",
       "3  11.575489 -7.202539  54  854  4081\n",
       "4  10.462870 -9.086972  21  898  4074"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "roll_df = pandas.DataFrame.from_records(roll_readings)\n",
    "roll_df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x7fe97a314da0>"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\nSUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7fe97a314358>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "ax = roll_df.plot('roll', 'x')\n",
    "roll_df.plot('roll', 'y', ax=ax)\n",
    "roll_df.plot('roll', 'z', ax=ax, xlim=(-90, 90))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The formula for MagY_comp we're using is:\n",
    "\n",
    "```python\n",
    "MagY_comp = (MagX*math.sin(roll)*math.sin(pitch)) +\\\n",
    "     (MagY*math.cos(roll)) - (MagZ*math.sin(roll)*math.cos(pitch)) \n",
    "```\n",
    "\n",
    "Where MagZ is the calibrated magnetism data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "dict_keys(['range_X', 'range_Y', 'offset_Y', 'offset_X', 'roll_readings'])"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "roll_data.keys()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "-839"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "roll_data['offset_X']"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Define the function we want to minimise.\n",
    "\n",
    "`p` is the array of two parameters; leastsq will try to optimise these so that the array it gets back is as close to 0 as possible."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "y_flat = roll_df[(-3 < roll_df.roll) & (roll_df.roll < +3)]['y'].mean()\n",
    "\n",
    "# Adjust X and Y fields by calibration already got (dance calibration)\n",
    "MagX = (roll_df.x - roll_data['offset_X']) / roll_data['range_X']\n",
    "MagY = (roll_df.y - roll_data['offset_Y']) / roll_data['range_Y']\n",
    "MagY_flat = (y_flat - roll_data['offset_Y']) / roll_data['range_Y']\n",
    "raw_z = roll_df.z\n",
    "\n",
    "# Convert pitch and roll to radians for trig functions\n",
    "roll = roll_df.roll\n",
    "roll_r = np.radians(roll)\n",
    "pitch = roll_df.pitch\n",
    "pitch_r = np.radians(pitch)\n",
    "\n",
    "def mag_y_comp_residuals(p):\n",
    "    MagY_comp = (MagX * np.sin(roll_r) * np.sin(pitch_r)) +\\\n",
    "     (MagY * np.cos(roll_r)) - (((raw_z - p[0]) / p[1])* np.sin(roll_r) * np.cos(pitch_r)) \n",
    "    return MagY_comp - MagY_flat"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Find the best parameters with [leastsq()](http://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.leastsq.html). If it was successful, `ier` should be an integer from 1 to 4, inclusive."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([   70.94803162,  3370.54086495])"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from scipy.optimize import leastsq\n",
    "res, ier = leastsq(mag_y_comp_residuals, (1, 1))\n",
    "assert 1 <= ier <= 4\n",
    "res"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "MagZ = (raw_z - res[0]) / res[1]\n",
    "\n",
    "MagY_comp = (MagX * np.sin(roll_r) * np.sin(pitch_r)) +\\\n",
    "    (MagY * np.cos(roll_r)) - (MagZ * np.sin(roll_r) * np.cos(pitch_r))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.legend.Legend at 0x7fe974fc5fd0>"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7fe975517128>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#plt.plot(roll, raw_z, label='Raw Z')\n",
    "plt.plot(roll, MagZ, label='Z')\n",
    "plt.plot(roll, MagZ * np.sin(roll_r) * np.cos(pitch_r), label='Z adjust')\n",
    "plt.xlabel('Roll (degrees)')\n",
    "plt.legend()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Plot the Y field values and the roll-compensated Y field. The compensated one should be flat, and they should intersect where `roll=0`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.legend.Legend at 0x7fe974f30cf8>"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7fe974ffb048>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(roll, MagY, label='Uncalibrated')\n",
    "plt.plot(roll, MagY_comp, label='Calibrated')\n",
    "plt.xlabel('Roll (degrees)')\n",
    "plt.legend()"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.5.1"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
